package com.xxchat.service;

import java.util.List;

import com.xxchat.entity.dto.TokenUserInfoDTO;
import com.xxchat.entity.query.UserInfoQuery;
import com.xxchat.entity.po.UserInfo;
import com.xxchat.entity.vo.PaginationResultVO;
import com.xxchat.entity.vo.UserInfoVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;


/**
 * 用户信息表 业务接口
 */
public interface UserInfoService {

	/**
	 * 根据条件查询列表
	 */
	List<UserInfo> findListByParam(UserInfoQuery param);

	/**
	 * 根据条件查询列表
	 */
	Integer findCountByParam(UserInfoQuery param);

	/**
	 * 分页查询
	 */
	PaginationResultVO<UserInfo> findListByPage(UserInfoQuery param);

	/**
	 * 新增
	 */
	Integer add(UserInfo bean);

	/**
	 * 批量新增
	 */
	Integer addBatch(List<UserInfo> listBean);

	/**
	 * 批量新增/修改
	 */
	Integer addOrUpdateBatch(List<UserInfo> listBean);

	/**
	 * 多条件更新
	 */
	Integer updateByParam(UserInfo bean,UserInfoQuery param);

	/**
	 * 多条件删除
	 */
	Integer deleteByParam(UserInfoQuery param);

	/**
	 * 根据UserId查询对象
	 */
	UserInfo getUserInfoByUserId(String userId);


	/**
	 * 根据UserId修改
	 */
	Integer updateUserInfoByUserId(UserInfo bean,String userId);


	/**
	 * 根据UserId删除
	 */
	Integer deleteUserInfoByUserId(String userId);


	/**
	 * 根据Email查询对象
	 */
	UserInfo getUserInfoByEmail(String email);


	/**
	 * 根据Email修改
	 */
	Integer updateUserInfoByEmail(UserInfo bean,String email);


	/**
	 * 根据Email删除
	 */
	Integer deleteUserInfoByEmail(String email);

	// 注册
    void register(@NotEmpty String checkCodeKey, @NotEmpty @Email(message = "邮箱格式不正确") @Size(max = 50, message = "邮箱长度不得超过50个字符") String email, @NotEmpty @Size(max = 32, message = "密码长度不得超过32个字符") String password, @NotEmpty @Size(min = 2, max = 20, message = "用户名长度必须在2到20个字符之间") String nickName, @NotEmpty String checkCode);

	// 登录
	UserInfoVO login(@NotEmpty String checkCodeKey, @NotEmpty @Email(message = "邮箱格式不正确") @Size(max = 50, message = "邮箱长度不得超过50个字符") String email, @NotEmpty @Size(max = 32, message = "密码长度不得超过32个字符") String password, @NotEmpty String checkCode, String ip);

	void updateUserInfo(UserInfo userInfo, MultipartFile avatarFile, MultipartFile avatarCover);

    void updateUserStatusByUserId(String userId, Integer status);

	void forceOffline(String userId);
}